import json
import sys
import time
from selenium import webdriver  # # 驱动浏览器
from selenium.webdriver.common.by import By  # 选择器
from selenium.webdriver.common.keys import Keys  # 按键
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载完毕，寻找某些元素
from selenium.webdriver.support import expected_conditions as EC  ##等待指定标签加载完毕
from selenium.webdriver import ChromeOptions
from bs4 import BeautifulSoup
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import TimeoutException, NoSuchElementException
from bs4 import BeautifulSoup


class JingDong():
    def __init__(self):
        self.url = 'https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_afe19eea49fd41f5b22c4404b2ae7e05'

        # 伪装
        self.options = webdriver.ChromeOptions()
        self.options.add_experimental_option('excludeSwitches', ['enable-automation'])


    def get_yemian(self):
        # 1,驱动浏览器
        self.browser = webdriver.Chrome(options=self.options)
         # 2，请求页面   --返回的数据封装在了browser对象里，不需要额外的变量接收
        self.browser.get(self.url)  # 调用浏览器驱动访问站点
        # 等待页面加载完毕
        wait = WebDriverWait(self.browser, 100)  # 参数1：浏览器对象 参数2：时间（秒）
        # 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'clearfix')))
    def denglu(self):
        # qq登录 (失败了)
        # # 点击登录
        # self.browser.find_element(By.XPATH,'//*[@id="ttbar-login"]/a[1]').click()
        # # 等待页面加载完毕
        # wait = WebDriverWait(self.browser, 100)  # 参数1：浏览器对象 参数2：时间（秒）
        # # 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
        # wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'pdl')))
        # # 点击qq跳转到第三方登录页面
        # self.browser.find_element(By.XPATH, '//*[@id="kbCoagent"]/ul/li[1]/a/span').click()
        # # 切换页面
        # self.browser.switch_to.frame('ptlogin_iframe')
        # # 等待页面加载完毕
        # wait = WebDriverWait(self.browser, 100)  # 参数1：浏览器对象 参数2：时间（秒）
        # # 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
        # wait.until(EC.presence_of_element_located((By.ID, 'switcher_plogin')))
        # self.browser.find_element(By.XPATH, '//*[@id="switcher_plogin"]').click()
        # # 输入账号密码
        # text_account = self.browser.find_element(By.ID,'u')
        # text_account.send_keys('1919404416')
        # text_password = self.browser.find_element(By.ID,'p')
        # text_password.send_keys('lhdtyy1021')
        # # 点击登录
        # self.browser.find_element(By.XPATH, '//*[@id="login_button"]').click()
        # 微信登录
        # 点击登录
        self.browser.find_element(By.XPATH,'//*[@id="ttbar-login"]/a[1]').click()
        # 等待页面加载完毕
        wait = WebDriverWait(self.browser, 100)  # 参数1：浏览器对象 参数2：时间（秒）
        # 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
        wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'pdl')))
        # 点击微信跳转到第三方登录页面
        self.browser.find_element(By.XPATH, '//*[@id="kbCoagent"]/ul/li[2]/a/span').click()
        time.sleep(5)


    def get_data(self):
        # 进入美食商品中
        text_data = self.browser.find_element(By.CLASS_NAME, 'text')
        text_data.send_keys('美食')
        # text_data.send_keys(Keys.ENTER)
        self.browser.find_element(By.XPATH,'//*[@id="search"]/div/div[2]/button').click()
        # 等待页面加载完毕
        wait = WebDriverWait(self.browser, 100)  # 参数1：浏览器对象 参数2：时间（秒）
        # 等待某元素出现 presence_of_element_located()传入的参数格式是一个元组
        wait.until(EC.presence_of_element_located((By.ID, 'J-global-toolbar')))
        # 标题
        print("进入美食界面")
        # 查看网页源码
        data = self.browser.page_source
        soup = BeautifulSoup(data,'lxml')
        name = soup.select('.gl-i-wrap .p-name.p-name-type-2 em')  # 商品名
        price = soup.select('.gl-i-wrap strong i')  # 价格
        urls = soup.select('.gl-i-wrap .p-name.p-name-type-2 a') # 链接
        print(urls)
        shop_info = {}  # 定义空字典
        for names, prices in zip(name, price):
            n = names.get_text()
            p = prices.get_text()
            u = a['href']
            # print(n)
            # print(p)
            print(u)
            # print('=' * 20)
            shop_info['商品名字'] = n
            shop_info['商品价格'] = p
            # shop_info['商品链接'] = u
            with open('shop_data.json', 'a', encoding='utf-8')as f:
                f.write(json.dumps(shop_info, ensure_ascii=False) + ',\n')








if __name__ == '__main__':
    a = JingDong()
    a.get_yemian()
    a.denglu()
    a.get_data()



